import { ApiResponse, LoginForm, Token } from '@/types/data'
import { LoginAction, RootThunkAction } from '@/types/store'
import request from '@/utils/request'
import { removeToken, setToken } from '@/utils/storage'

export function userLogin (values: LoginForm): RootThunkAction {
  console.log(2)
  return async (dispatch) => {
    console.log(2.1)
    // 1. 发请求<ApiResponse<Token>>
    const res = await request.post<ApiResponse<Token>>('/authorizations', values)
    console.log(2.2, res.data)
    // 2. 保存token
    dispatch({
      type: 'login/token',
      payload: res.data.data
    })

    // 3. 本地持久化
    setToken(res.data.data)
  }
}

export function saveToken (token: Token) : LoginAction {
  // 1. 本地持久化
  setToken(token)

  // 2. 保存token
  return {
    type: 'login/token',
    payload: token
  }
}
export function logout () : LoginAction {
  // 1. 清空token
  removeToken()
  // 2. 清空redux
  return {
    type: 'login/quit'
  }
}
// 获取验证码
export const getCode = (mobile: string) => {
  return async () => {
    await request.get(`/sms/codes/${mobile}`)

    // 注意：验证码是发送到手机上的，因此，不需要更新Redux状态
  }
}
